package fsnotifyalter

import (
	"os"

	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"gopkg.in/natefinch/lumberjack.v2"
)

var (
	logger *zap.Logger
)

func (n *Notify) initLogger() {
	writeSyncer := n.getLogWriter()
	encoder := n.getEncoder()
	// core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
	// 即输入到文件，又输入到控制台
	core := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(writeSyncer, zapcore.AddSync(os.Stdout)), zapcore.DebugLevel)
	logger = zap.New(core)
}
func (n *Notify) getEncoder() zapcore.Encoder {
	// return zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder // 修改时间编码器

	// 在日志文件中使用大写字母记录日志级别
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
	// NewConsoleEncoder 打印更符合人们观察的方式
	return zapcore.NewConsoleEncoder(encoderConfig)
}

func (n *Notify) getLogWriter() zapcore.WriteSyncer {
	/*
		Lumberjack Logger采用以下属性作为输入:

			Filename: 日志文件的位置
			MaxSize：在进行切割之前，日志文件的最大大小（以MB为单位）
			MaxBackups：保留旧文件的最大个数
			MaxAges：保留旧文件的最大天数
			Compress：是否压缩/归档旧文件
	*/
	lumberJackLogger := &lumberjack.Logger{
		Filename:   n.LogFilename,
		MaxSize:    n.LogMaxSize,
		MaxBackups: n.LogMaxBackup,
		MaxAge:     n.LogMaxAge,
		Compress:   false,
		LocalTime:  true,
	}
	return zapcore.AddSync(lumberJackLogger)
}
